package main

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-17 09:25:58
 * @Description: 374. 猜数字大小
 猜数字游戏的规则如下：

每轮游戏，我都会从 1 到 n 随机选择一个数字。 请你猜选出的是哪个数字。
如果你猜错了，我会告诉你，你猜测的数字比我选出的数字是大了还是小了。
你可以通过调用一个预先定义好的接口 int guess(int num) 来获取猜测结果，返回值一共有 3 种可能的情况（-1，1 或 0）：

-1：我选出的数字比你猜的数字小 pick < num
1：我选出的数字比你猜的数字大 pick > num
0：我选出的数字和你猜的数字一样。恭喜！你猜对了！pick == num
返回我选出的数字。

*/

func guess(num int) int {
	if num < 5 {
		return 1
	}
	if num > 5 {
		return -1
	}
	return 0
}

/**
 * @Author: DengLibin
 * @Date: Create in 2023-01-17 09:49:33
 * @Description: 思路 找到最大和最小 再二分
 */
func guessNumber(n int) int {

	var r int = guess(n)
	if r == 0 {
		return n
	}
	var min, max int
	if r == -1 {
		for r == -1 {
			max = n
			n /= 2
			r = guess(n)
		}
		if r == 0 {
			return n
		}
		min = n
	} else if r == 1 {
		for r == 1 {
			min = n
			n *= 2
			r = guess(n)
		}
		if r == 0 {
			return n
		}
		max = n
	}
	for {
		n = (min + max) / 2
		r = guess(n)
		if r == 0 {
			return n
		}
		if r == 1 {
			min = n
		} else if r == -1 {
			max = n
		}
	}

}
